//是否打开日志记录开关
var DEBUG_MODE = true;



//当前页
var curPage = 1;
//是否最后一页
var loadEnd = false;
//签名key
var sign_key = null;
// 扫码结果
var Scannervalue='';
var StockScannervalue='';
//分配的接入帐号
var assigned_accessCode = "parts";
var assigned_key = "uuEdBGJlfU32WhQA";

//下载存储的文件夹名称
var downloadFileFolderName = "download";

//var baseURL = 'http://1695t41y96.iok.la/parts/a/appInterface/';//本地
//var baseURL = 'http://192.168.0.107:8080/parts/a/appInterface/';//本地
//var baseURL = 'http://10.64.224.24:8081/parts/a/appInterface/';//服务器测试环境
// var baseURL = 'http://10.70.243.133:8080/parts/a/appInterface/';//服务器正式环境
// var baseURL = 'http://192.168.1.121:9603/parts/a/appInterface/';
// var baseURL = 'http://192.168.1.121:8080/parts/a/appInterface/';
var baseURL = 'http://192.168.1.124:8080/parts_war_exploded/';

window.onload = function() {
	Wresize(320,640);
}
window.onresize = function() {
	Wresize(320,640);
}
function Wresize(min,max) {
	var clientWidth =window.document.body.clientWidth;
	var size = parseInt(clientWidth);
	if (document.body.offsetWidth > max) {
		size = max;
	} else if(document.body.offsetWidth < min) {
		size = min;
	}
	document.getElementsByTagName('html')[0].style.fontSize = size / 18 + "px";
}

function slideToCenter(mySwiper,slide){
	slideLeft = slide.offsetLeft
	slideWidth = slide.clientWidth
	slideCenter = slideLeft + slideWidth / 2
	// 被点击slide的中心点
	mySwiper.setTranslate(300)
	if (slideCenter < swiperWidth / 2) {
		mySwiper.setTranslate(0)
	} else if (slideCenter > maxWidth) {
		mySwiper.setTranslate(maxTranslate)
	} else {
		nowTlanslate = slideCenter - swiperWidth / 2
		mySwiper.setTranslate(-nowTlanslate)
	}
}

function AddData(scriptId, CotaiorId,dataList,isload) {
	var Lists =  template(scriptId,{datas:dataList});
	if (isload) {
		$api.append($api.byId(CotaiorId),Lists);
	} else{
		$api.html($api.byId(CotaiorId),Lists);
	}
}

function openWin(name,title,params, pageParam){
	api.openTabLayout({
	    name: name,
	    url: 'widget://html/'+name+'.html',
	    title: title,
	    hideNavigationBar: false,
	    navigationBar: params,
	    pageParam: pageParam
	});
}
function openTastWin (name, title, pageParam) {
	openWin(name,title,{
        background: '#6098de',
        color: '#fff'
    }, pageParam)
}
function openNewWin(name, title, pageParam){
	openWin(name,title,{
        background: '#6098de',
        color: '#fff',
        rightButtons:[{
        	iconPath:"widget://image/newPage.png"
        }]
    }, pageParam)
}
function openSaveWin(name, title, pageParam){
	if (!canModify()){
		return;
	}
	openWin(name,title,{
        background: '#6098de',
        color: '#fff',
        rightButtons:[{
        	iconPath:"widget://image/save-icon.png"
        }]
    }, pageParam)
}
var getToken;
//获取服务端数据
function ajaxrd(methodName, values, callBack) {
	if ( methodName !== 'appLogin') {
		getToken = $api.getStorage('partsInfo');
		if (getToken) {
			values.token = getToken.token
		} else {
			api.openWin({
	            name: 'login',
	            url: './login.html'
	        });
	        return
		}
	}
//	var appVersion = api.appVersion;
//	if(DEBUG_MODE){
//		appVersion = 10000;//永远有效
//	}else{
//		appVersion = appVersion.split(".")[2];
//	}
 	var startTime = new Date();
	var request_url = baseURL + methodName;
	msgDialog.openWait();
	//产生16位的随机数
	var nonce = RndNum(16);
	var timestamp = (new Date()).getTime();
	var sign = getMD5(assigned_accessCode+nonce+timestamp+assigned_key);
	values.version = 58;
	var requestParam = {
		"auth":{
	        "syscode":'' + assigned_accessCode + '',
			"nonce": ''+nonce+'',
			"sign":''+sign+'',
			"timestamp":'' + timestamp + ''
		}
		,
		"api_ver":"1",
		"req":values
	}

	var bodyvalues = JSON.stringify(requestParam);
	log(methodName + "请求的地址是：" + request_url + "; 请求的参数是：" + bodyvalues);
	api.ajax({
		url : '' + request_url + '',
		method : 'post',
		headers : {"Content-Type" : "application/json"},
		data : {
			body : bodyvalues
		},
		cache : false,
		dataType : 'json'
	}, function(ret, err) {
		msgDialog.clsoeWait();
		var endTime = new Date();
		//console.log(JSON.stringify(ret),JSON.stringify(err))
        var duration = endTime.getTime() - startTime.getTime();

        log(methodName + "耗时：" + duration + "毫秒！");
        if(ret){
        	log(methodName + "， 收到返回报文ret===>:" + JSON.stringify(ret));
		}else{
			log(methodName + "， 收到返回报文err===>:" + JSON.stringify(err));
			if(err.statusCode == 432){
				api.alert({msg : '' + err.body.msg});
				api.hideProgress();
				$api.rmStorage('partsInfo');
				//window.location.href = 'widget://login.html';
				api.openFrame({
	                name: 'login',
	                url: 'widget://html/login.html',
	                rect: {
		                x:0,
		                y:0,
		                w:'auto',
		                h:'auto'
	                }
                });
				return;
			}
		}
//		api.hideProgress();
		if (ret.code == '200' || ret.code == 200) {
			if (ret.resp.flag == '1') {
				callBack(ret.resp.data);
			} else {
				 Toast(ret.resp.desc);
			}

		} else {
			Toast(err.msg);
			//callBack(ret, err);
		}
		api.refreshHeaderLoadDone();
	});
}

/**
 * Description:[输出指定n位数的随机数的随机整数]
 *
 * @param n  指定n位数
 *
 */
function RndNum(n) {
    var rnd = "";
    for (var i = 0; i < n; i++) {
        rnd += Math.floor(Math.random() * 10);
    }
    return rnd;
}


/*
 * 获得签名串
 */
var signature = null;

function getMD5(originStr, _upperCase) {
	var curUpperCase = false;
	if(typeof(_upperCase) != 'undefined'){
		curUpperCase = _upperCase;
	}
    if (signature == null) {
        signature = api.require("signature");
    }
    var strBeforeMD5 = originStr;
    log("strBeforeMD5===>" + strBeforeMD5);
    var strAfterMD5 = signature.md5Sync({
        data: '' + strBeforeMD5,
        uppercase : curUpperCase
    });
    log("strAfterMD5===>" + strAfterMD5);
    return strAfterMD5;
}
// 对Date的扩展，将 Date 转化为指定格式的String
// 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符，
// 年(y)可以用 1-4 个占位符，毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
// 例子：
// (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423
// (new Date()).Format("yyyy-M-d h:m:s.S")      ==> 2006-7-2 8:9:4.18
Date.prototype.Format = function(fmt) {
    var o = {
        "M+": this.getMonth() + 1, //月份
        "d+": this.getDate(), //日
        "h+": this.getHours(), //小时
        "m+": this.getMinutes(), //分
        "s+": this.getSeconds(), //秒
        "q+": Math.floor((this.getMonth() + 3) / 3), //季度
        "S": this.getMilliseconds() //毫秒
    };
    if (/(y+)/.test(fmt))
        fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
    for (var k in o)
        if (new RegExp("(" + k + ")").test(fmt))
            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
    return fmt;
}
/*************************************
APP辅助方法封装
/*************************************/
/**
 * 日志打印（普通方式）
 * (DEBUG_MODE 参数为true时，控制台方可打印内容)
 * @param (JSON|Array||String) params 打印的内容参数，支持JSON对象、数组、字符串
 */
function log(params) {
    if (!DEBUG_MODE) {
        return;
    }
    var tSign = '【' + new Date().Format("yyyy-MM-dd hh:mm:ss") + '】';

    if (api && api.frameName) {
        tSign += '【win: ' + api.winName + '】  【frame: ' + api.frameName + '】';
    } else {
        tSign += '【win: ' + api.winName + '】';
    }

    if (1 === arguments.length) {
        if (typeof params === 'string') {
            tSign += params;
        } else {
            tSign += $api.jsonToStr(params);
        }
    } else if (arguments.length > 1) {
        Array.prototype.forEach.call(arguments, function(param) {
            if (typeof param == 'string') {
                tSign += param;
            } else {
                tSign += $api.jsonToStr(param);
            }
        });
    }
    console.log(tSign);
}

var showTooltc = function (IDname) {
	$api.removeCls($api.byId(IDname),'mui-hidden');
}
var cancelTooltc = function (IDname) {
	$api.addCls($api.byId(IDname),'mui-hidden');
}

/*
 * 设置到离底部多少距离触发加载下一页事件
 */
function scrollToBottomHandler(callBack) {
    api.addEventListener({
        name: 'scrolltobottom',
        extra: {
            threshold: 0 //设置距离底部多少距离时触发，默认值为0，数字类型
        }
    }, function(ret, err) {
        //alert('已滚动到底部');
        callBack();
    });
}

/*
 * 下拉刷新
 */
function Refresh (callBack) {
	api.setCustomRefreshHeaderInfo({
		bgColor: '#C0C0C0',
//		images: ['widget://image/tool1.png','widget://image/tool1.png'],
		tips: {
			pull: '下拉刷新',
			threshold: '松开立即刷新',
			load: '正在刷新'
		}
	},function () {
		callBack();
//		api.refreshHeaderLoadDone()
	})
}


var Search = function () {
	loadEnd = false;
	page = 1;
	onLoadData(page,false);
}

var Toast = function (text) {
	api.toast({
	    msg: text,
	    duration: 2000,
	    location: 'middle'
	});
}
var EndToast = function (text) {
	api.toast({
	    msg: text,
	    duration: 2000,
	    location: 'bottom'
	});
}



//限制只能从相机拍照上传
function takePicture(callBack) {
	getPicture('camera', callBack);
}

var uploadRetryCount=0;//失败重试计数器

//获取照片（从相册、图片库或相机）
function getPicture(sourceType, callBack) {
	api.getPicture({
		sourceType : sourceType,
		encodingType : 'jpg',
		mediaValue : 'pic',
		destinationType : 'url',
		allowEdit : true,
		quality : 50,
		saveToPhotoAlbum : false
	}, function(ret, err) {
		if (ret) {
			// alert(JSON.stringify(ret));
			var localImgFile = ret.data;
			if (localImgFile == '') {
				//如果不存在选择的图片时直接返回
				return;
			}
			uploadPhoto(localImgFile, callBack);
		} else {
			api.alert({
				msg : JSON.stringify(err)
			});
		}
	});
}

//上传照片
function uploadPhoto(localImgFile, callBack) {
	console.log("localImgFile===="+localImgFile)
	var requestData;
	getToken = $api.getStorage('partsInfo');
	//console.log("uploadPhoto.userInfo:" + JSON.stringify(userInfo));
	if (getToken) {
		requestData = {
			token: getToken.token,
			file: localImgFile,
			isCompress:1
		}
	} else {
		api.openWin({
            name: 'login',
            url: './login.html'
        });
        return
	}

	//alert("requestData:" + JSON.stringify(requestData));
	api.showProgress({
		style : 'default',
		animationType : 'fade',
		title : '努力上传中...',
		text : "0%",
		modal : true
	});

	upload(requestData, localImgFile, function(picName, fileName, id) {
		//console.log("=========>ret:"+JSON.stringify(ret));
		//console.log("=========>err:"+JSON.stringify(err));
		callBack(localImgFile, fileName, id);

	});
}
function upload(bodyParam, picName, callBack) {

	uploadRetryCount = 0;
		uploadHelperWithoutEncry(bodyParam, picName, callBack);

}
//实现失败重传3次机制，如果仍失败则定为上传失败（没签名加密版）
function uploadHelperWithoutEncry(bodyParam, picName, callBack){
	console.log("picName === "+picName)
	api.ajax({
		url : baseURL + 'uploadFile',
		method : 'post',
		cache : false,
		dataType : 'json',
		returnAll : false,
		timeout : 120,
		report : true,
		data : {
			values : bodyParam,
			files : {
				'file' : picName
			}
		}
	}, function(ret, err) {

		if (ret && ret.status == 0) {
			//上传中
			api.showProgress({
				style : 'default',
				animationType : 'fade',
				title : '努力上传中...',
				text : ret.progress + "%",
				modal : true
			});
		} else if (ret && ret.status == 1) {
			// console.log(JSON.stringify(ret))
			//上传完成
			var FLAG = ret.body.resp.flag;
			var BODY = ret.body.resp.desc;
			if (FLAG == '1') {
				callBack(picName, ret.body.resp.data[0].docinfoid, ret.body.resp.data[0].docinfoid_sl);
			} else {
				if(uploadRetryCount >= 4){
					api.alert({
						msg : ('上传照片失败。 错误码：' + FLAG + '；  错误信息：' + BODY)
					});
				}else{
					uploadRetryCount++;
					uploadHelperWithoutEncry(bodyParam, picName, callBack);
				}
			}
			api.hideProgress();
		} else if (ret && ret.status == 2) {
			//上传失败
			if(uploadRetryCount >= 4){
				api.alert({
					msg : '上传照片失败: ' + JSON.stringify(ret)
				});
			}else{
				uploadRetryCount++;
				uploadHelperWithoutEncry(bodyParam, picName, callBack);
			}
			api.hideProgress();
		}

		if(err){
			api.hideProgress();
			if(err.msg){
				api.alert({
					msg : err.msg
				});
			}
		}


	});
}

//查看本地照片
function showLocalPicture(localPath) {
	api.openWin({
		name : 'common_picture_viewer',
		url : 'common_picture_viewer.html',
		pageParam : {
			'picturePath' : localPath
		},
		vScrollBarEnabled : false,
		hScrollBarEnabled : false,
		animation : {
			type : "push", //动画类型（详见动画类型常量）
			subType : "from_right", //动画子类型（详见动画子类型常量）
			duration : 300 //动画过渡时间，默认300毫秒
		},
		progress : {
			type : "default", //加载进度效果类型，默认值为default，取值范围为default|page，default等同于showProgress参数效果；为page时，进度效果为仿浏览器类型，固定在页面的顶部
			title : "图片加载中", //type为default时显示的加载框标题
			text : "请等候", //type为default时显示的加载框内容
			color : "#45C01A" //type为page时进度条的颜色，默认值为#45C01A，支持#FFF，#FFFFFF，rgb(255,255,255)，rgba(255,255,255,1.0)等格式
		},
		delay : 100
	});
}

//查看远程服务器照片
//下载文件
function downloadRemoteFile(remoteFileUrl, local_fileName, callBack) {

    var savePath = api.cacheDir + '/' + downloadFileFolderName + '/' + local_fileName;
    log("remoteFileUrl:" + remoteFileUrl);

    api.download({
        url: remoteFileUrl,
        savePath: savePath,
        report: true,
        cache: true,
        allowResume: true
    }, function(ret, err) {
        callBack(ret, err);
    });
}

//查看远程服务器照片
function showRemotePicture(remoteFileUrl, local_fileName) {
    api.showProgress({
        style: 'default',
        animationType: 'fade',
        title: '努力下载中...',
        text: "0%",
        modal: true
    });
    downloadRemoteFile(remoteFileUrl, local_fileName, function(ret, err) {
        //0   下载中; 1 下载完成; 2 下载失败
        if (ret) {
            var state = ret.state;
            if (state == 0) {
                //下载中
                api.showProgress({
                    style: 'default',
                    animationType: 'fade',
                    title: '努力下载中...',
                    text: ret.percent + "%",
                    modal: true
                });
            } else if (state == 1) {
                //下载完成
                api.hideProgress();
                showLocalPicture(ret.savePath);
            } else {
                api.hideProgress();
                //下载失败
                Toast('下载照片失败，请重试！');
            }
        } else {
            Toast('下载照片失败:' + JSON.stringify(err));
            api.hideProgress();
        }
    });
}

//选择年月份时分
function selectCommonYMDhm(callBack) {
	window.scrollTo(0,1);
	var options = {
		"type" : "datetime",
		"beginYear" : 2018,
		"endYear" : 2025
	};
	var picker = new mui.DtPicker(options);
	picker.show(function(rs) {
		/*
		* rs.value 拼合后的 value
		* rs.text 拼合后的 text
		* rs.y 年，可以通过 rs.y.vaue 和 rs.y.text 获取值和文本
		* rs.m 月，用法同年
		* rs.d 日，用法同年
		* rs.h 时，用法同年
		* rs.i 分（minutes 的第二个字母），用法同年
		*/
		//result.innerText = '选择结果: ' + rs.text;
		//var yearTxt = rs.y.value.toString().substring(2,4);
		//$api.text($api.byId(txtDateId), yearTxt + rs.m.value + rs.d.value);
		//$api.val($api.byId(valDateId), rs.y.value +'-' + rs.m.value + '-' + rs.d.value);
		// var ym = rs.y.value.toString() + '-' + rs.m.value.toString() + '-' rs.d.value.toString() + " "+ rs.h.value.toString();
		//setText('txtYearMonth', ym);
		//setVal('hidYearMonth', ym);
		callBack(rs.value + ":00");
		/*
		 * 返回 false 可以阻止选择框的关闭
		 * return false;
		 */
		/*
		 * 释放组件资源，释放后将将不能再操作组件
		 * 通常情况下，不需要示放组件，new DtPicker(options) 后，可以一直使用。
		 * 当前示例，因为内容较多，如不进行资原释放，在某些设备上会较慢。
		 * 所以每次用完便立即调用 dispose 进行释放，下次用时再创建新实例。
		 */
		picker.dispose();
	});
}


//选择年月日
function selectCommonYMD(callBack) {
	window.scrollTo(0,1);
	var options = {
		"type" : "date",
		"beginYear" : 2018,
		"endYear" : 2125
	};
	var picker = new mui.DtPicker(options);
	picker.show(function(rs) {
		/*
		* rs.value 拼合后的 value
		* rs.text 拼合后的 text
		* rs.y 年，可以通过 rs.y.vaue 和 rs.y.text 获取值和文本
		* rs.m 月，用法同年
		* rs.d 日，用法同年
		* rs.h 时，用法同年
		* rs.i 分（minutes 的第二个字母），用法同年
		*/
		//result.innerText = '选择结果: ' + rs.text;
		//var yearTxt = rs.y.value.toString().substring(2,4);
		//$api.text($api.byId(txtDateId), yearTxt + rs.m.value + rs.d.value);
		//$api.val($api.byId(valDateId), rs.y.value +'-' + rs.m.value + '-' + rs.d.value);
		// var ym = rs.y.value.toString() + '-' + rs.m.value.toString() + '-' rs.d.value.toString() + " "+ rs.h.value.toString();
		//setText('txtYearMonth', ym);
		//setVal('hidYearMonth', ym);
		callBack(rs.value);
		/*
		 * 返回 false 可以阻止选择框的关闭
		 * return false;
		 */
		/*
		 * 释放组件资源，释放后将将不能再操作组件
		 * 通常情况下，不需要示放组件，new DtPicker(options) 后，可以一直使用。
		 * 当前示例，因为内容较多，如不进行资原释放，在某些设备上会较慢。
		 * 所以每次用完便立即调用 dispose 进行释放，下次用时再创建新实例。
		 */
		picker.dispose();
	});
}

// 获取当前年月日时分
function getCurYMDhm (){
	var date = new Date();
	var seperator1 = "-";
	var seperator2 = ":";
	var month = date.getMonth() + 1<10? "0"+(date.getMonth() + 1):date.getMonth() + 1;
	var strDate = date.getDate()<10? "0" + date.getDate():date.getDate();
	var currentdate = date.getFullYear() + seperator1  + month  + seperator1  + strDate
			+ " "  + date.getHours()  + seperator2  + date.getMinutes() + seperator2  + date.getSeconds()
	return currentdate;
}

var ScannerTimes = 0,value1='',value2='',resultHtml;
//扫码
var Scanner = function (type) {
	FNScanner.open({
	    autorotation: true,
	    isAlbum: true
	}, function(ret, err) {
	    if (ret) {
	        if (ret.eventType == 'success' && ret.content != '') {
                    // 扫码成功执行函数操作传值
                    if (type == 1){//设备
	                    var value = ret.content.split('|');
	                    Scannervalue = value[0];
	                    if (value.length < 2) {
	                    	Toast('请扫设备二维码！')
	                    } else {
	                    	showTooltc('OrderTool');
	                    }
	                    return;
                    }
                    else if(type==2) {//物料
                    	var value = ret.content.split('/');
                    	Scannervalue = value[1];
                    	StockScannervalue = value[0];
                    	if (value.length < 2) {
	                    	Toast('请扫物料二维码！')
	                    } else {
	                    	showTooltc('StockTool');
	                    }
                    	return;
                    }
                    else if(type==3) {//入库防错
                    	ScannerTimes++;
                    	if (ScannerTimes == 1) {
                    		value1 = ret.content;
                    		Scanner(3);
                    		return;
                    	}
                    	value2 = ret.content;
                    	resultHtml = '<p>'+value1+'</p><p>'+value2+'</p>';
                    	if (value1.split('/')[1] == value2.split('/')[1]){
                    		resultHtml+='<p class="good">库存地址相同</p>';
                    	}else{
                    		resultHtml +='<p class="mis">库存地址不同</p>';
                    	}
                    	$api.html($api.byId('scanerVal'),resultHtml);
                    	showTooltc('rkTool');
                    	ScannerTimes = 0,resultHtml = '';
                    } else if(type==4) { // 首页物料查询>库存清单里的二维码
                    	var value = ret.content.split('/');
                    	Scannervalue = value[1];
                    	StockScannervalue = value[0];
                    	if (value.length < 2) {
	                    	Toast('请扫物料二维码！')
	                    } else {
	                    	$api.val($api.byId('searchText'),StockScannervalue);
	                    	onLoadData(1,false);
	                    }
                    	return;
                    }
                }
                if (ret.eventType == 'cameraError') {
                    Toast('请开启app访问手机摄像头权限');
                    setTimeout(function() {
                        // 关闭扫码器  关闭扫码界面
                    }, 300);
                    return;
                }
                if (ret.eventType == 'albumError') {
                	Toast('请开启app访问手机相册权限');
                    setTimeout(function() {
                        back();
                    }, 300);
                    return;
                }
                if (ret.eventType == 'fail') {
                	Toast('扫码失败,请从新扫码');
                    setTimeout(function() {
                        back();
                    }, 300);
                    return;
                }
	    } else {
	        Toast('扫码错误请稍后再试');
            setTimeout(function() {
                back();
            }, 300);
	    }
	});
}

var Delete = function (method,params) {
	if (!canModify()){
		return;
	}
	api.confirm({
	    title: '提示',
	    msg: '确定删除吗？',
	    buttons: ['确定', '取消']
	}, function(ret, err) {
	    var index = ret.buttonIndex;
	    if (index == 1) {
	    	ajaxrd(method, params, function(ret, err) {
				Toast('删除成功！');
				onLoadData(1,false);
			})
	    }
	});
}

var canModify = function () {
	var workstatus = $api.getStorage('workstatus');
	if(workstatus != '关闭') {
		return true;
	} else {
		Toast('此工单只能查看！');
		return false;
	}
}

var tjsearch = function () {
	loadEnd = false;
	curPage = 1;
	onLoadData(curPage,false);
}
var msgDialog = function() {};
msgDialog.prototype = {
    createWait:function(){
    	var ContentHtml="<div id='loding_'><div></div><div></div><div></div><div></div></div>"
    	document.body.insertAdjacentHTML('beforeend', ContentHtml);
    },
    DeleteWait: function(){
    	document.querySelector("#loding_").remove();
    },
    openWait:function(){
    	var self=this;
    	return self.createWait();
    },
    clsoeWait:function(){
    	var self=this;
    	return self.DeleteWait();
    }
};
var msgDialog = new msgDialog();


//功能：计算两个时间戳之间相差的日时分秒

function interval(faultDate,completeTime){
	var stime = Date.parse(new Date(faultDate));
	var etime = Date.parse(new Date(completeTime));
	var usedTime = etime - stime;  //两个时间戳相差的毫秒数
	var days=Math.floor(usedTime/(24*3600*1000));
	//计算出小时数
	var leave1=usedTime%(24*3600*1000);    //计算天数后剩余的毫秒数
	var hours=Math.floor(leave1/(3600*1000));
	//计算相差分钟数
	var leave2=leave1%(3600*1000);        //计算小时数后剩余的毫秒数
	var minutes=Math.floor(leave2/(60*1000));
	var time = days + "天"+hours+"时"+minutes+"分";
	return time;
}

//用于生成uuid
function S4() {
    return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
}

function guid() {
    return (S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4());
}


function showExcelFile(remoteFileUrl, localFileName){
    downloadRemoteFile(remoteFileUrl, localFileName, function(ret, err) {
        //0   下载中; 1 下载完成; 2 下载失败
        if (ret) {
            var state = ret.state;
            if (state == 0) {
                //下载中
                api.showProgress({
                    style: 'default',
                    animationType: 'fade',
                    title: '努力下载中...',
                    text: ret.percent + "%",
                    modal: true
                });
            } else if (state == 1) {
                //下载完成
                api.hideProgress();
                var docInteraction = api.require('docInteraction');
                log("***********" + ret.savePath);
				docInteraction.open({
				    path: '' + ret.savePath
				}, function(ret, err) {
				    if (err) {
				        //alert(JSON.stringify(err));
				    } else {
				        //alert(JSON.stringify(ret));

				    }
				});
            } else {
                api.hideProgress();
                //下载失败
                Toast('下载照片失败，请重试！');
            }
        } else {
            Toast('下载照片失败:' + JSON.stringify(err));
            api.hideProgress();
        }
    });
}

function formatDate(time,format){
    var date = new Date(time);

    var year = date.getFullYear(),
        month = date.getMonth()+1,//月份是从0开始的
        day = date.getDate(),
        hour = date.getHours(),
        min = date.getMinutes(),
        sec = date.getSeconds();
    var preArr = Array.apply(null,Array(10)).map(function(elem, index) {
        return '0'+index;
    });//开个长度为10的数组 格式为 ["00", "01", "02", "03", "04", "05", "06", "07", "08", "09"]

    var newTime = format.replace(/YY/g,year)
        .replace(/MM/g,preArr[month]||month)
        .replace(/DD/g,preArr[day]||day)
        .replace(/hh/g,preArr[hour]||hour)
        .replace(/mm/g,preArr[min]||min)
        .replace(/ss/g,preArr[sec]||sec);

    return newTime;
};

/*****根据元素Id进行赋值****/
function setVal(eid, val) {
	$api.val($api.byId(eid), val);
}

function setText(eid, txt) {
	$api.text($api.byId(eid), txt);
}

/*****根据元素Id进行取值****/
function getVal(eid) {
	return $api.trim($api.val($api.byId(eid)));
}

function getText(eid) {
	return $api.trim($api.text($api.byId(eid)));
}
